﻿using System;
using System.Collections.Generic;
using Neturion.Dados;
using Neturion.IRepositorios;
using Neturion.Repositorios;
using Neturion.Utils;

namespace Neturion.Negocios
{
    /// <summary>
    /// 
    /// </summary>
    public class NegocioFornecedor
    {
        private IRepositorioFornecedor _repositorioFornecedor;

        /// <summary>
        /// 
        /// </summary>
        public NegocioFornecedor()
        {
            _repositorioFornecedor = new RepositorioFornecedor();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="fornecedor"></param>
        /// <returns></returns>
        public Fornecedor Inserir(Fornecedor fornecedor)
        {
            fornecedor.Codigo = GeradorCodigo.GerarCodigo(1);
            fornecedor.Codigo += (_repositorioFornecedor.ObterUltimoIdCodigoInteiro() + 1).ToString();
            fornecedor.Codigo += GeradorCodigo.GerarCodigo(1, fornecedor.Codigo);
            return _repositorioFornecedor.Inserir(fornecedor);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="fornecedor"></param>
        /// <returns></returns>
        public Fornecedor Atualizar(Fornecedor fornecedor)
        {
            return _repositorioFornecedor.Atualizar(fornecedor);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="fornecedor"></param>
        public void Excluir(Fornecedor fornecedor)
        {
            Fornecedor fornecedorTmp = ObterPorId(fornecedor.FornecedorId);
            _repositorioFornecedor.Excluir(fornecedorTmp);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public IList<Fornecedor> ObterTodos()
        {
            return _repositorioFornecedor.ObterTodos();
        }

        public IList<Fornecedor> ObterTodos(int inicio, int quantidade, int quantidadeMinima, Usuario usuarioPermissao, string nomeRazaoSocial, string apelidoFantasia, string nomeReduzido, string cpfCnpj, Midia midia, EnumTipoPessoa enumTipoPessoa, RamoAtividade ramoAtividade, Cnae cnae, DateTime? dataNascimentoAberturaDe, DateTime? dataNascimentoAberturaAte, DateTime? cadastroDe, DateTime? cadastroAte, DateTime? inicioVigenciaDe, DateTime? inicioVigenciaAte, DateTime? fimVigenciaDe, DateTime? fimVigenciaAte)
        {
            //Regras do Usuário
            return _repositorioFornecedor.ObterTodos(inicio, quantidade, quantidadeMinima, nomeRazaoSocial, apelidoFantasia, nomeReduzido, cpfCnpj, midia, enumTipoPessoa, ramoAtividade, cnae, dataNascimentoAberturaDe, dataNascimentoAberturaAte, cadastroDe, cadastroAte, inicioVigenciaDe, inicioVigenciaAte, fimVigenciaDe, fimVigenciaAte);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Fornecedor ObterPorId(int id)
        {
            return _repositorioFornecedor.ObterPorId(id);
        }

        public Fornecedor ObterPorCodigo(Usuario usuarioPermissao, string codigo)
        {
            return _repositorioFornecedor.ObterPorCodigo(codigo);
        }

        public Fornecedor ObterPorCpfCnpj(Usuario usuarioPermissao, string cpfCnpj)
        {
            return _repositorioFornecedor.ObterPorCpfCnpj(cpfCnpj);
        }

        public Fornecedor ObterPorPessoa(Usuario usuarioPermissao,Pessoa pessoa)
        {
            return _repositorioFornecedor.ObterPorPessoa(pessoa);
        }

        public IList<Fornecedor> ObterPorNome(int inicio, int quantidade, int quantidadeMinima, string nome)
        {
            return _repositorioFornecedor.ObterPorNome(inicio, quantidade, quantidadeMinima, nome);
        }

        public IList<Fornecedor> ObterPorRamoAtividade(RamoAtividade ramoAtividade)
        {
            return _repositorioFornecedor.ObterPorRamoAtividade(ramoAtividade);
        }

        public IList<Fornecedor> ObterPorCnae(Cnae cnae)
        {
            return _repositorioFornecedor.ObterPorCnae(cnae);
        }
    }
}